//package com.bwie.service.impl;
//import com.bwie.config.SnowFlakeUtil;
//import com.bwie.dao.OrdersDao;
//import com.bwie.dao.SeckillDao;
//import com.bwie.entity.Order;
//import com.bwie.entity.Seckill;
//import com.bwie.entity.User;
//
////import com.bwie.rabbit.Production;
//import com.bwie.redis.RedisService;
//import com.bwie.service.OrdersService;
//import com.bwie.utils.R;
//import org.redisson.api.RLock;
//import org.redisson.api.RedissonClient;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.ValueOperations;
//import org.springframework.stereotype.Service;
//
//import javax.servlet.http.HttpSession;
//import java.util.Date;
//import java.util.concurrent.TimeUnit;
//
//@Service
//@SuppressWarnings("all")
//public class OrdersServiceImpl implements OrdersService {
//
//    @Autowired
//    private OrdersDao ordersDao;
//    @Autowired
//    private HttpSession session;
//    @Autowired
//    private SeckillDao seckillDao;
//    @Autowired
//    private RedisService redisService;
//    @Autowired
//    private RedissonClient redissonClient;
//    @Autowired
//    private RedisTemplate redisTemplate;
//
////    @Autowired
////    private Production production;
////    @Autowired
////    private MyQueue myQueue;
//
//
//    @Override
//    public R insert(Order order) {
//        RLock rLock = redissonClient.getLock("lock_on");
//        rLock.lock(10, TimeUnit.SECONDS);
//        Seckill cacheObject = redisService.getCacheObject("goodsid_num_ch:" + order.getShopId());
//        try {
//            //获取秒杀库存是否足够
//            int num = seckillDao.findByNum(cacheObject.getSeckillMiddleId());
//            if (num > 0) {
//                ValueOperations ops = redisTemplate.opsForValue();
//                User user = (User) ops.get("user");
//                System.out.println(user);
//                Order o1 = new Order();
//                Seckill seckill = seckillDao.findByGoodsId(order.getShopId());
//                //查询到消息不为空时
//                if (seckill != null) {
//                    String code = SnowFlakeUtil.getRandomStr();
//                    o1.setUserId(user.getUserId());
//                    o1.setCode(code);
//                    o1.setOrderCreateTime(new Date());
//                    o1.setOrderStatus(0);
//                }
//                //发送mq修改商品库存
//                production.sendSubtract(cacheObject.getSeckillMiddleId());
//                //修改redis商品数量 预减数量
//                cacheObject.setSeckillStockNum(cacheObject.getSeckillStockNum() - 1);
//                //修改reds中的商品数量
//                redisService.setCacheObject("goodsid_num_ch:" + cacheObject.getShopId(), cacheObject);
//                int i =0;
//                if (i > 0) {
//                    production.sendMsg(o1.getShopId()+"",500000);
//                } else {
//                    production.sendPlus(cacheObject.getSeckillMiddleId());
//                    //修改redis商品数量 加回来数量
//                    cacheObject.setSeckillStockNum(cacheObject.getSeckillStockNum() + 1);
//                    //修改reds中的商品数量
//                    redisService.setCacheObject("goodsid_num_ch:" + cacheObject.getShopId(), cacheObject);
//                }
//                return R.ok().put("orderId", o1.getOrderId());
//            } else {
//                return R.error(500, "库存不足");
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//        }finally {
//            //释放锁
//            rLock.unlock();
//        }
//        return R.error(500,"秒杀失败");
//    }





//    @Override
//    public R findList(Integer id) {
//        return null;
//    }

//    @Override
//    public R findList(Integer id) {
//        Order order =ordersDao.findList(id);
//        if (order != null){
//            return R.ok().put("order",order);
//        }
//        return R.error();
//    }
//
//    @Override
//    public R orderfindByCode(String out_trade_no) {
//        //通过唯一id获取对应信息
//        Order order = ordersDao.findByCode(out_trade_no);
//        order.setOrderStatus(1);
//        order.setOrderCreateTime(new Date());
//        int i = ordersDao.updateByStatus(order);
//        if (i>0){
//            return R.ok();
//        }
//        return R.error();
//    }
//}
